#include "key.h"
#include "delay.h"
/**********************************************************************
*函数名：KEY_Init 
*功  能：按键初始化
*参  数：无
*返  回：无
*备  注：无
**********************************************************************/	 
void KEY_Init(void)
{
	
	GPIO_InitTypeDef GPIO_InitStructure;

 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能时钟
	
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_5|GPIO_Pin_6;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成输入，默认上拉	  
	GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
	
	GPIO_SetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_5|GPIO_Pin_6); //置高
	
} 

//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//返回值：
//0，没有任何按键按下
//KEY0_PRES，KEY0按下
//KEY1_PRES，KEY1按下
//WKUP_PRES，WK_UP按下 
//注意此函数有响应优先级,KEY0>KEY1>WK_UP!!

u8 KEY_Scan(u8 mode)
{	 
	static u8 key_up=1;//按键按松开标志
	if(KEY_sub==0||KEY_add==0||MODE_CH==0) mode=0;   //这些按键不支持连续按
	if(mode)key_up=1;  //支持连按		  
	if(key_up&&(KEY_go==0||KEY_back==0||KEY_sub==0||KEY_add==0||KEY_left==0||KEY_right==0||MODE_CH==0))
	{
		delay_ms(10);//去抖动 
		key_up=0;
		if(KEY_go==0&&KEY_left==0)return Go_Left;
		else if(KEY_go==0&&KEY_right==0)return Go_Right;
		else if(KEY_back==0&&KEY_left==0)return Back_Left; 
		else if(KEY_back==0&&KEY_right==0)return Back_Right;
		else if(KEY_go==0)return Go;
		else if(KEY_back==0)return Back;
		else if(KEY_left==0)return Left;
		else if(KEY_right==0)return Right;
		else if(KEY_sub==0)return Sub;
		else if(KEY_add==0)return Add;
		else if(MODE_CH==0)return mode_change;
		
	}
	else if(KEY_go==1&&KEY_back==1&&KEY_sub==1&&KEY_add==1&&KEY_left==1&&KEY_right==1&&MODE_CH==1)
	key_up=1; 	     
	return 0;// 无按键按下
}
